"""
https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/description/

103. 二叉树的锯齿形层序遍历
已解答
中等
相关标签
premium lock icon
相关企业
给你二叉树的根节点 root ，返回其节点值的 锯齿形层序遍历 。（即先从左往右，再从右往左进行下一层遍历，以此类推，层与层之间交替进行）。

 

示例 1：


输入：root = [3,9,20,null,null,15,7]
输出：[[3],[20,9],[15,7]]
示例 2：

输入：root = [1]
输出：[[1]]
示例 3：

输入：root = []
输出：[]
 

提示：

树中节点数目在范围 [0, 2000] 内
-100 <= Node.val <= 100

"""

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from typing import List, Optional
from tree_node import TreeNode,build_tree_node


class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        temp=[root]
        res=[]
        direction=True
        while temp:
            cur_vals=[]
            next_list=[]
            for pnode in temp:
                if pnode:
                    cur_vals.append(pnode.val)
                    if pnode.left:
                        next_list.append(pnode.left)
                    if pnode.right:
                        next_list.append(pnode.right)
            if direction:
                res.append(cur_vals)
            else:
                res.append(cur_vals[::-1])
            direction=not direction
            temp=next_list

        return res
        pass
